from django.db import models
from django.contrib.auth.models import AbstractUser  # 说明是一个抽象模型类
from db.base_model import BaseModel
# Create your models here.


class User(AbstractUser, BaseModel):
    '''用户模型类'''
    # identifier必须有，不然后报错abstractbaseuser主要是用来重写django默认的后台user
    # identifier = models.CharField(max_length=40, unique=True)
    # USERNAME_FIELD = 'identifier'
    class Meta:
        db_table = 'df_user'
        verbose_name = '用户'  # 这个生成的是“用户s”
        verbose_name_plural = verbose_name  # 这个可以将后面s去掉

# 模型类管理器
class AddressManager(models.Manager):
    # 改变默认的objects，给他添加新的自己需要的方法
    def get_default_address(self, user):
        try:
            # user_default = Address.objects.get(user = user ,is_default=True)
            # 因为下面的模型类名字改变了，这里的所有的得跟着变，所以我们用self.model来获取模型类
            # user_default = self.model.objects.get(user = user ,is_default=True)
            # 因为self.model就等于Address，self就等于objects,所以把self.model.objects改写为self
            user_default = self.get(user=user, is_default=True)
        except Exception as e:
            user_default = None

        return user_default


class Address(BaseModel):
    '''用户地址模型类  一个用户可以对应多个收件地址，所以建立用户和地址一对多关系'''
    user = models.ForeignKey(
        'User', verbose_name='所属账户', on_delete=models.CASCADE)
    receiver = models.CharField(max_length=20, verbose_name='收件人')
    addr = models.CharField(max_length=256, verbose_name='收件地址')
    zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')
    phone = models.CharField(max_length=11, verbose_name='收件人电话')
    is_default = models.BooleanField(default=False, verbose_name='是否默认')

    objects = AddressManager()

    class Meta:
        db_table = 'df_address'
        verbose_name = '地址'
        verbose_name_plural = verbose_name
